/**
 * 客户端会话ID管理工具
 * 用于浏览器会话隔离，确保不同浏览器标签页的会话相互独立
 */

const CLIENT_SESSION_KEY = 'arcchat_client_session_id'

/**
 * 生成唯一的客户端会话ID
 * @returns {string} 客户端会话ID
 */
function generateClientSessionId() {
  // 使用时间戳 + 随机数生成唯一ID
  const timestamp = Date.now()
  const random = Math.random().toString(36).substring(2, 15)
  return `client_${timestamp}_${random}`
}

/**
 * 获取或创建客户端会话ID
 * 如果 localStorage 中已存在，则返回；否则创建新的并保存
 * @returns {string} 客户端会话ID
 */
export function getOrCreateClientSessionId() {
  try {
    // 尝试从 localStorage 获取
    let clientSessionId = localStorage.getItem(CLIENT_SESSION_KEY)
    
    // 如果不存在，创建新的
    if (!clientSessionId) {
      clientSessionId = generateClientSessionId()
      localStorage.setItem(CLIENT_SESSION_KEY, clientSessionId)
      console.log('创建新的客户端会话ID:', clientSessionId)
    }
    
    return clientSessionId
  } catch (error) {
    // 如果 localStorage 不可用（如隐私模式），使用内存存储
    console.warn('localStorage 不可用，使用内存存储:', error)
    if (!window._arcchatClientSessionId) {
      window._arcchatClientSessionId = generateClientSessionId()
    }
    return window._arcchatClientSessionId
  }
}

/**
 * 获取客户端会话ID（不创建新ID）
 * @returns {string|null} 客户端会话ID，如果不存在则返回 null
 */
export function getClientSessionId() {
  try {
    return localStorage.getItem(CLIENT_SESSION_KEY) || window._arcchatClientSessionId || null
  } catch (error) {
    return window._arcchatClientSessionId || null
  }
}

/**
 * 清除客户端会话ID（用于重置会话）
 * @returns {void}
 */
export function clearClientSessionId() {
  try {
    localStorage.removeItem(CLIENT_SESSION_KEY)
    delete window._arcchatClientSessionId
  } catch (error) {
    delete window._arcchatClientSessionId
  }
}

/**
 * 重新生成客户端会话ID（用于切换会话）
 * @returns {string} 新的客户端会话ID
 */
export function regenerateClientSessionId() {
  clearClientSessionId()
  return getOrCreateClientSessionId()
}

